package com.banyou.banyou.customviews;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.text.Layout;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.EditText;

import com.banyou.banyou.R;
import com.banyou.banyou.util.FontDisplayUtil;
import com.banyou.banyou.util.SnackBarUtil;


/**
 * ----------Dragon be here!----------/
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑
 * 　　　　┃　　　┃代码无BUG！
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━神兽出没━━━━━━
 * 项目名称：WheelMedical
 * 包名:com.yyxk.wheelmedical.customview
 * 类描述：解决ScrollView与EditText的滚动冲突
 * 创建人：Random
 * 创建时间：11:52
 * 修改人：Random
 * 修改时间：11:52
 * 修改备注：
 */
public class ScrollEditText extends EditText {

    public Layout mLayout;
    public int paddingTop;
    public int paddingBottom;
    public int mHeight;
    public int mLayoutHeight;
    public boolean canScroll = false;
    private int mMaxText = 500;
    private Context mContext;
    private Paint mCountPaint;

    public ScrollEditText setMaxText(int maxText) {
        mMaxText = maxText;
        return this;
    }

    public ScrollEditText(Context context) {
        super(context);
        mContext = context;
        init();
    }

    public ScrollEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
        init();
    }

    public ScrollEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mCountPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
        mCountPaint.setTextSize(FontDisplayUtil.sp2px(mContext,12));
        mCountPaint.setColor(mContext.getResources().getColor(R.color.text_gray));
        mCountPaint.setStrokeWidth(1);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        mLayout = getLayout();
        mLayoutHeight = mLayout.getHeight();
        paddingTop = getTotalPaddingTop();
        paddingBottom = getTotalPaddingBottom();
        mHeight = getHeight();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        boolean result = super.onTouchEvent(event);
        if (canScroll) {
            getParent().requestDisallowInterceptTouchEvent(true);
        }
        return result;
    }

    @Override
    protected void onScrollChanged(int horiz, int vert, int oldHoriz, int oldVert) {
        super.onScrollChanged(horiz, vert, oldHoriz, oldVert);
        //这里是滑动到底部的示例，滑动到顶部只用计算vert的值是否为0就可以
        //这里可以提前计算好一个值，不用每次进行计算，这里只是做示例
        if (vert > 0) {
            //这里触发父布局或祖父布局的滑动事件，下面这行代码只是示例作用，并没有实现真正的效果
            getParent().requestDisallowInterceptTouchEvent(false);
            canScroll = true;
        }

    }

    private String mMaxTextString;

    @Override
    protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {

        if (text.length() < mMaxText) {
            super.onTextChanged(text, start, lengthBefore, lengthAfter);
            mMaxTextString=text.toString();
        } else if (text.length() == mMaxText) {
            super.onTextChanged(text, start, lengthBefore, lengthAfter);
            mMaxTextString=text.toString();
        } else {
            SnackBarUtil.makeSnackBar("已经达到限制字数");
            setText(mMaxTextString);
        }

    }

    private String mCount="0/"+mMaxText;
    private Rect mTextRect=new Rect();
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.save();
        super.onDraw(canvas);
        canvas.restore();
        mCount=getText().length()+"/"+mMaxText;
        mCountPaint.getTextBounds(mCount,0,mCount.length(),mTextRect);
        canvas.drawText(mCount,getWidth()-mTextRect.width()-FontDisplayUtil.dip2px(mContext,10),getHeight()+getScrollY()-mTextRect.height()/2,mCountPaint);
    }
}
